package first

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

/*
	从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。

	例如:
	给定二叉树:[3,9,20,null,null,15,7],

		3
	   / \
	  9  20
		/  \
	   15   7
	返回：

	[3,9,20,15,7]

	来源：力扣（LeetCode）
	链接：https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
	著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func levelOrder1(root *TreeNode) []int {
	if nil == root {
		return nil
	}
	queue := []*TreeNode{root}
	result := make([]int, 0)
	for len(queue) != 0 {
		length := len(queue)
		res := make([]int, 0)
		for length != 0 {
			cur := queue[0]
			queue = queue[1:]
			res = append(res, cur.Val)
			if nil != cur.Left {
				queue = append(queue, cur.Left)
			}
			if nil != cur.Right {
				queue = append(queue, cur.Right)
			}
			length--
		}
		result = append(result, res...)
	}
	return result
}